BITS 32
%include "macrosmodoprotegido.mac"

extern identificarTarea

global imprimir_tarea

; definicion de las rutinas de atencion de interrupciones
; Largo de los mensajes: 31 caracteres, 
isr69mensaje: db 'Parametros incorrectos         '
isr0mensaje:  db 'Divide by Zero                 '
isr1mensaje:  db 'Reserved for Intel use only    '
isr2mensaje:  db 'Nonmaskable External Interrupt '
isr3mensaje:  db 'Breakpoint                     '
isr4mensaje:  db 'Overflow                       '
isr5mensaje:  db 'Bound Range Exceeded           '
isr6mensaje:  db 'Invalid Opcode                 '
isr7mensaje:  db 'No Math Coprocessor            '
isr8mensaje:  db 'Double Fault                   '
isr9mensaje:  db 'Coprocessor Segment Overrun    '
isr10mensaje: db 'Invalid TSS                    '
isr11mensaje: db 'Segment Not Present            '
isr12mensaje: db 'Stack Segment Fault            '
isr13mensaje: db 'General Protection Fault       '
isr14mensaje: db 'Page Fault                     '
isr15mensaje: db 'Reserved for Intel use only    '
isr16mensaje: db 'x87 FPU Floating-Point Error   '
isr17mensaje: db 'Alignment Check                '
isr18mensaje: db 'Machine Check                  '
isr19mensaje: db 'SIMD Floating-Point Exception  ' 

;defininicion de los nombres de las tareas
_tarea1: db 'tarea 1'
_tarea2: db 'tarea 2'
_tarea3: db 'tarea 3'
_tarea4: db 'tarea 4'
_tarea5: db 'tarea 5'

%define _tareaLen 7
%define _errorLen 31

%define fila 2
%define columna1 67
%define columna2 3

%define color1 0x2F
%define color2 0x0F

imprimir_tarea:

	mov eax, cr3
	push eax
	call identificarTarea
	add esp, 4
	
	cmp eax, 1
	jne .tarea2
	IMPRIMIR_TEXTO _tarea1, _tareaLen, color1, fila, columna1
	mov ebx, 19 ;fila correspondiente al estado de la tarea 1
	jmp .imprimirError
	
.tarea2:
	cmp eax, 2
	jne .tarea3
	IMPRIMIR_TEXTO _tarea2, _tareaLen, color1, fila, columna1
	mov ebx, 20 ;fila correspondiente al estado de la tarea 2
	jmp .imprimirError
	
.tarea3:
	cmp eax, 3
	jne .tarea4
	IMPRIMIR_TEXTO _tarea3, _tareaLen, color1, fila, columna1
	mov ebx, 21 ;fila correspondiente al estado de la tarea 3
	jmp .imprimirError
	
.tarea4:
	cmp eax, 4
	jne .tarea5
	IMPRIMIR_TEXTO _tarea4, _tareaLen, color1, fila, columna1
	mov ebx, 22 ;fila correspondiente al estado de la tarea 4
	jmp .imprimirError
	
.tarea5:
	cmp eax, 5
	jne .fin
	IMPRIMIR_TEXTO _tarea5, _tareaLen, color1, fila, columna1
	mov ebx, 23 ;fila correspondiente al estado de la tarea 5
	jmp .imprimirError
	
.imprimirError
	mov eax, [esp+4]
	
	cmp eax, 0
	jne .error1
	mov eax, isr0mensaje
	jmp .imprimir
	
.error1:
	cmp eax, 1
	jne .error2
	mov eax, isr1mensaje
	jmp .imprimir
	
.error2:
	cmp eax, 2
	jne .error3
	mov eax, isr2mensaje
	jmp .imprimir
	
.error3:
	cmp eax, 3
	jne .error4
	mov eax, isr3mensaje
	jmp .imprimir
	
.error4:
	cmp eax, 4
	jne .error5
	mov eax, isr4mensaje
	jmp .imprimir
	
.error5:
	cmp eax, 5
	jne .error6
	mov eax, isr5mensaje
	jmp .imprimir
	
.error6:
	cmp eax, 6
	jne .error7
	mov eax, isr6mensaje
	jmp .imprimir
	
.error7:
	cmp eax, 7
	jne .error8
	mov eax, isr7mensaje
	jmp .imprimir
	
.error8:
	cmp eax, 8
	jne .error9
	mov eax, isr8mensaje
	jmp .imprimir
	
.error9:
	cmp eax, 9
	jne .error10
	mov eax, isr9mensaje
	jmp .imprimir
	
.error10:
	cmp eax, 10
	jne .error11
	mov eax, isr10mensaje
	jmp .imprimir
	
.error11:
	cmp eax, 11
	jne .error12
	mov eax, isr11mensaje
	jmp .imprimir
	
.error12:
	cmp eax, 12
	jne .error13
	mov eax, isr12mensaje
	jmp .imprimir
	
.error13:
	cmp eax, 13
	jne .error14
	mov eax, isr13mensaje
	jmp .imprimir
	
.error14:
	cmp eax, 14
	jne .error15
	mov eax, isr14mensaje
	jmp .imprimir
	
.error15:
	cmp eax, 15
	jne .error16
	mov eax, isr15mensaje
	jmp .imprimir
	
.error16:
	cmp eax, 16
	jne .error17
	mov eax, isr16mensaje
	jmp .imprimir
	
.error17:
	cmp eax, 17
	jne .error18
	mov eax, isr17mensaje
	jmp .imprimir
	
.error18:
	cmp eax, 18
	jne .error19
	mov eax, isr18mensaje
	jmp .imprimir
	
.error19:
	cmp eax, 19
	jne .error69
	mov eax, isr19mensaje
	jmp .imprimir
	
.error69:
	cmp eax, 69
	jne .fin
	mov eax, isr69mensaje
	jmp .imprimir
	
.imprimir:
	IMPRIMIR_TEXTO eax, _errorLen, color2, ebx, columna2

.fin:
	ret
